#include<stdio.h>
int main()
{
    char num[2][5];
    //全数字+' '+全数字才是合法的
    int i = 0;
    while ((num[0][i] = getchar()) != ' ' && num[0][i] >= 48 && num[0][i] <= 57)
    {
        i++;
    }
    if (num[0][i] != ' ')
    {
        //说明拿到的是不合法的，需要清除空格前的未拿取的不合法字符
        while (getchar() != ' ')
        {
            ;
        }
    }
    int j = 0;
    while ((num[1][j] = getchar()) != '\n' && num[1][j] >= 48 && num[1][j] <= 57)
    {
        j++;
    }
    if (num[1][j] != '\n')
    {
        //说明拿到的是不合法的，需要清除\n前的未拿取的不合法字符
        while (getchar() != '\n')
        {
            ;
        }
    }
    int a = 0;
    int b = 0;
    int flag_a = 0;
    int flag_b = 0;
    if (num[0][i] == ' ' && num[0][0] != '0')
    //0不是正整数，以0开头的数字也不是正整数（虽然后者好像没啥影响）
    {
        switch(i)//i同时也是位数
            {
                case 4:
                    if(num[0][0]=='1'&&num[0][1]=='0'&num[0][2]=='0'&&num[0][3]=='0')
                    {
                        a = 1000;
                    }
                    else
                    {
                        flag_a = 1;
                    }
                    break;
                case 3:
                    a = (num[0][0] - '0') * 100 + (num[0][1] - '0') * 10 + num[0][2] - '0';
                    break;
                case 2:
                    a = (num[0][0] - '0') * 10 + (num[0][1] - '0');
                    break;
                case 1:
                    a = num[0][0] - '0';
                    break;
                default:
                    break;
            }
    }
    else
    {
        flag_a = 1;
    }
    if (num[1][j] == '\n' && num[1][0] != '0')
    {
        switch(j)
        {
            case 4:
                if(num[1][0]=='1'&&num[1][1]=='0'&num[1][2]=='0'&&num[1][3]=='0')
                    {
                        b = 1000;
                    }
                    else
                    {
                        flag_b = 1;
                    }
                break;
            case 3:
                b = (num[1][0] - '0') * 100 + (num[1][1] - '0') * 10 + num[1][2] - '0';
                break;
            case 2:
                b = (num[1][0] - '0') * 10 + (num[1][1] - '0');
                break;
            case 1:
                b = num[1][0] - '0';
                break;
            default:
                break;
        }
    }
    else
    {
        flag_b = 1;
    }
    switch(flag_a)
    {
        case 0:
            switch(flag_b)
            {
                case 0:
                    printf("%d + %d = %d", a, b, a + b);
                    break;
                case 1:
                    printf("%d + ? = ?", a);
                    break;
                default:
                    break;
            }
            break;
        case 1:
            switch(flag_b)
            {
                case 0:
                    printf("? + %d = ?", b);
                    break;
                case 1:
                    printf("? + ? = ?");
                    break;
                default:
                    break;
            }
        default:
            break;
    }
    return 0;
}